Область применения: управляемое приложение, мобильное приложение.
1. Платформа 1С:Предприятие позволяет передавать управление из клиентского в серверный код модуля формы двумя способами: контекстно и внеконтекстно.
При внеконтекстной передаче управления на сервер передаются только те данные, которые явно специфицированы разработчиком в параметрах процедуры (функции) с директивой компиляции &НаСервереБезКонтекста.
При контекстной передаче управления на сервер, помимо параметров процедуры (функции) с директивой компиляции &НаСервере, передаются еще и данные формы, которые были изменены на клиенте за период с момента предыдущего контекстного серверного вызова (см. ниже приложение). При этом на сервере выполняется ряд дополнительных действий по инициализации методов формы и серверной копии данных формы, что может увеличивать общее время, которое сервер затрачивает на обработку вызванной процедуры (функции).
2.1. Контекстную передачу управления следует использовать в случаях когда:
При этом следует учитывать, что в некоторых клиентских обработчиках событий форм (ПередЗаписью, ПослеЗаписи, ПередЗакрытием, ПриЗакрытии и др.) не допускается вызов контекстных серверных процедур, а также выполнение действий, которые могут привести к неявному серверному вызову. Подробности см. в документации платформы.
Для устранения контекстного серверного вызова есть несколько способов:
Неправильно:
&НаКлиенте
Процедура Подключаемый_ДоступныеПоляПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ПриИзмененииОбразцаНаСервере();
КонецПроцедуры
Правильно:
&НаКлиенте
Процедура Подключаемый_ДоступныеПоляПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ПодключитьОбработчикОжидания("ПриИзмененииОбразца", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииОбразца()
ПриИзмененииОбразцаНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииОбразцаНаСервере()
...
КонецПроцедуры
2.2. В случае, если на форме размещена таблица, при активизации строки которой необходимо обновлять содержимое формы (например, выводить подробности к выделенной строке), то в обработчике таблицы ПриАктивизацииСтроки следует подключать однократный обработчик ожидания. В нем выполнять действия, которые приводят к перестроению формы: контекстные серверные вызовы, изменение свойств элементов формы и т.п. При этом чтобы избежать повторных вызовов ПриАктивизацииСтроки, необходимо запоминать текущую строку (ИдентификаторТекущейСтроки) и не выполнять обновление формы, если она не изменилась.
3. При передаче управления с клиента на сервер недопустимо использовать объекты типов ДанныеФормыСтруктура, ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево и ТабличныйДокумент в качестве параметров функции, передаваемых по значению. При передаче таких типов по значению с клиента на сервер всегда передается полная копия объекта, а не только измененные данные.
Вести работу с этими типами следует на сервере, для чего переходить с клиента на сервер с помощью явного контекстного вызова сервера.
Например, неправильно:
// Модуль формы
&НаКлиенте
Процедура КоличествоОтмененныхСтрокЗаказа()
КоличествоСтрок = ОбщийМодульВызовСервера.КоличествоОтмененныхСтрок(Объект.Товары); // Неоптимальная передача на сервер табличной части "Товары"
КонецПроцедуры
// Общий серверный модуль ОбщийМодульВызовСервера
Функция КоличествоОтмененныхСтрок(ТабличнаяЧасть);
НайденныеСтроки = ТабличнаяЧасть.НайтиСтроки(Новый Структура("Отменено", Истина));
Возврат НайденныеСтроки.Количество();
КонецФункции
Правильно:
// Модуль формы
&НаКлиенте
Процедура КоличествоОтмененныхСтрокЗаказа()
КоличествоСтрок = КоличествоОтмененныхСтрок(); // Передача табличной части "Товары" выполняется неявно платформой, оптимально
КонецПроцедуры
&НаСервере
Процедура КоличествоОтмененныхСтрок()
Возврат ОбщийМодульВызовСервера.КоличествоОтмененныхСтрок(Объект.Товары); // вызов "сервер"-"сервер" без доп. накладных расходов
КонецПроцедуры
// Общий серверный модуль ОбщийМодульВызовСервера
Функция КоличествоОтмененныхСтрок(ТабличнаяЧасть);
НайденныеСтроки = ТабличнаяЧасть.НайтиСтроки(Новый Структура("Отменено", Истина));
Возврат НайденныеСтроки.Количество()
КонецФункции
При контекстной передаче управления на сервер в платформе 1С:Предприятие действуют следующие правила передачи измененных данных формы между клиентом и сервером: